package com.itheima.web;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import com.itheima.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1：处理请求编码问题
        request.setCharacterEncoding("utf-8");
        //2:获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //获取验证码 完成校验
        //获取用户录入的验证码
        String inputCode = request.getParameter("code");

        //怎么获取  生成的验证码？
        Object code = request.getSession().getAttribute("code");

        if(!inputCode.equals(code)){
            //比较 如果不ok
//            response.setContentType("text/html;charset=utf-8");
//            response.getWriter().write("<h2>兄嘚~您的验证码有误，请重新录入<a href='login.html'></a></h2>");
//
            //验证码有误就不要往下执行了 所以 直接在这里return
            //验证码错误  告诉 login.jsp就行 它负责展示错误信息
            //使用 请求转发 技术 把 提示信息告知 login.jsp
            request.setAttribute("msg","兄嘚~您的验证码有误，请重新录入");
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }


        //3:找到service对象
        UserService service = new UserServiceImpl();
        //调用登录功能
        User user = service.login(username, password);

        if(user==null){
            //登录失败   跳转到
            //使用 请求转发 技术 把 提示信息告知 login.jsp
            request.setAttribute("msg","兄嘚~您的用户名或密码错误，请重新录入");
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }else{
            // 如果登录成功  且选中了  记住用户名密码 那么就要将用户名密码以cookie形式传递给前端
            //获取选中框的值
            String remMe = request.getParameter("remMe");

            if(remMe!=null){//被选中了
                //将用户名和密码  以cookie形式 写到浏览器上
                Cookie usernameCookie = new Cookie("username", username);
                Cookie passwordCookie = new Cookie("password", password);

                //进行响应
                //设置一下 存活时间
                usernameCookie.setMaxAge(60*60);
                passwordCookie.setMaxAge(60*60);
                //为了方便项目中每一个地方都能拿到cookie 可以设置path
                usernameCookie.setPath("/");
                passwordCookie.setPath("/");
                //添加到响应头中
                response.addCookie(usernameCookie);
                response.addCookie(passwordCookie);

            }


            //如果是admin管理员 就进行查询操作
            if("admin".equals(username)){
             //查到service查询
                List<User> users = service.queryAll();
                //返回的集合 先放到 域对象中
                request.setAttribute("list",users);
                //完成请求转发
                request.getRequestDispatcher("UserList.jsp").forward(request,response);

            }else{
                //登录成功  跳转主页
                response.sendRedirect("/login&register/success.html");
            }



        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
